home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.025 < prev    next >
Encoding:
Text File  |  1997-06-14  |  4.7 KB  |  133 lines

  1. *cX               PROGRAMACION 3D
  2. *cMBy Skynet 
  3. *cR
  4.   Hola, en esta segunda  parte  de  esta sec-
  5. cion, vamos a machacar las cosas que aprendi-
  6. mos en la *cEPhyMosys III*cR. En primer  lugar,  os
  7. agradezco el interes  que  habeis  tenido  en
  8. esto, ya que han llegado  bastantes  E-mails,
  9. ademas hoy como prometí a algunos, meteré  mi
  10. lector  de  archivos  de  *cA3D  Studio*cR...bueno,
  11. empecemos!! :)
  12.   Como vimos la semana pasada,  aprendimos  a
  13. crear una tercera dimension en  nuestro moni-
  14. tor, a crear pantallas virtuales,  las matri-
  15. ces de las operaciones basicas, crear  campos
  16. de estrellas, etc...
  17.   Hoy lo que vamos a hacer es a "coger"  esos
  18. objetos 3D para  meterlos  en  nuestra  demo.
  19. Como los vamos a coger? bueno...pues  de  eso
  20. se encarga mi programa. El  *cA3D  Studio*cR  tiene
  21. una opcion para salvar los archivos en archi-
  22. vos *cW3DS*cR o *cWASC*cR. Los archivos *cWASC*cR son  los  que
  23. nos interesan, porque contienen la  lista  de
  24. vertices, poligonos y aristas.  Para  conocer
  25. un poco mas el formato vamos a abrir  uno re-
  26. cortado:
  27.  
  28. *cH--------------------------------------------
  29. *c.Ambient light color:
  30. Red=0.039216 Green=0.039216 Blue=0.039216
  31.                        *i$
  32. Named object: "Object"
  33. Tri-mesh, Vertices: 660     Faces: 1292
  34. Vertex list:
  35. Vertex 0: 
  36.  X: -90.999413   Y: 0.000003  Z: 22.282175
  37. Vertex 1:  
  38.  X: -101.339294  Y: 0         Z: 22.282175
  39. Vertex 2:
  40.  X: -101.653366  Y: 0.000003  Z: 24.025192
  41. Vertex 3:
  42.  X: -102.086533  Y: 5.03      Z: 25.571856
  43. Vertex 659:
  44.  X: 124.625061   Y: 13.499992 Z: 26.994728
  45. Face list:
  46. Face 0:    A:1 B:0 C:121 AB:1 BC:1 CA:0
  47. Smoothing:  17
  48. Face 1:    A:62 B:61 C:60 AB:1 BC:1 CA:0
  49. Smoothing:  17
  50. Face 2:    A:63 B:62 C:60 AB:1 BC:0 CA:0
  51. *cR
  52.  
  53.   Aunque no  lo  veamos  ahora,  el  programa
  54. separa en paginas el archivo, cosa que no  he
  55. depurado todavia y  que  por  tanto  se  debe
  56. eliminar con un editor para  que  todo  quede
  57. como  si  fuese  una  unica  pagina.  Despues
  58. podemos ver que el programa  tiene  numerados
  59. los vertices. Cada vertice contiene los  tres
  60. valores en  X,Y,Z  y  por  tanto  en  nuestro
  61. programa hemos creado un *c6ARRAY*cR que almacenara 
  62. variables con los campos X,Y y Z de forma que 
  63. el Vertex 0 coincida en  la  posicion  0  del
  64. array, el Vertex 1 en la posicion 1...etc...
  65.  
  66.   Aqui tendremos que "retocar"  algo  tambien
  67. del archivo. Como para nuestro programa vamos 
  68. a realizar una conversion a 3D, la variable Y 
  69. no puede ser nunca 0, y por tanto  debe modi-
  70. ficarse. Fijaros en el vertex  1,  como  veis
  71. tiene de valor 0. lo que haremos sera  editar
  72. lo y dejarlo por ejemplo: *i#
  73. *c.
  74. Vertex 1:  
  75.  X: -101.339294  Y: 0.00010     Z: 22.282175
  76. *cR
  77.   De forma que le pondremos todos los decima-
  78. les que necesitamos (5 al menos), aproximando 
  79. a su valor real. Con esto  tambien  tendremos
  80. que modificar el vertex 3  debido  a  que  no
  81. llega ni a  5  decimales.  Con  su  posterior
  82. modificacion quedara:
  83. *c.
  84. Vertex 3:  
  85.  X: -102.086533  Y: 5.030000    Z: 25.571856
  86. *cR
  87.   Y nuestro programa ya no tendra problemas.
  88.   Para acabar de  repararlo,  el  objeto  que
  89. creamos, si  sobrepasa  las  80  unidades  se
  90. saldra de pantalla, asi  que  podeis  hacerlo
  91. pequeño y despues aumentarlo con el "aumenta-
  92. dor" que he programado en uno de los procedi-
  93. mientos.
  94.   Una vez comentados los errores que  debemos
  95. evitar en el programa, pasamos a como  se  ha
  96. realizado. Una vez  hayamos  insertado  todos
  97. los vertices en el array lo  que  haremos  es
  98. insertar los planos en otro array. Este array 
  99. sera un array de una variable que  tendra  de
  100. campos A,B y C que son como se especifica  un
  101. poligono en *cA3D Studio*cR:
  102. *c.
  103. Face 0:    A:1 B:0 C:121 AB:1 BC:1 CA:0
  104. *cR
  105.   Esto significa que la FACE 0 se compone por 
  106. el vertice 1,0 y 121 como indican A,  B  i  C
  107. que son los indicadores de poligonos. De esta 
  108. forma creamos el poligono mas veloz que es el 
  109. triangulo. (Es el mas rapido debido a  que  a
  110. la hora de rellenarlo no tiene  problemas  de
  111. intersecciones de lineas, ya que en un trian-
  112. gulo nunca podremos tener ese problema.
  113.   Bueno, una vez  insertado  en  la  memoria,
  114. ahora tendremos que crearlo,  lo  cual  puede
  115. ser  visto  en  el  codigo   en   PASCAL   de
  116. *cTSkynet.pas*cR
  117.   Ademas he creado algunos ejemplos de archi-
  118. vos*cW ASC*cR.
  119.   Ah!!  Si  mirais  bien  el  codigo  fuente,
  120. vereis que utilizo una  libreria  de  musica,
  121. esta es para incorporarle sonido  a  la  rota
  122. cion...esto lo explicare en el  proximo nume-
  123. ro. Espero que  os  sirva  para  algo,  o  en
  124. vuestras demos... si  lo  utilizais,  almenos
  125. nombradnos! :)
  126.   Bueno, nos  vemos  el  próximo  número  con
  127. efectos graficos....      
  128. *cM
  129. Skynet Rulez!
  130. amarfer@alufis34.ffisic.uv.es
  131.  
  132.                 *i"
  133.